package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	//Pipe 创建一个同步的内存管道。 它可用于将需要 io.Reader 的代码与需要 io.Writer 的代码连接起来。
	//
	//管道上的读取和写入是一对一匹配的，除非需要多个读取来消耗单个写入。 也就是说，对 PipeWriter 的每次写入都会阻塞，直到它满足来自 PipeReader 的一次或多次读取，这些读取完全消耗了写入的数据。 数据直接从Write复制到对应的Read（或Reads）； 没有内部缓冲。
	//
	//并行调用 Read 和 Write 或使用 Close 是安全的。 对 Read 的并行调用和对 Write 的并行调用也是安全的：各个调用将按顺序进行门控。

	r, w := io.Pipe()

	go func() {
		fmt.Fprintf(w, "some io.Reader stream to be read\n")
		w.Close()
	}()

	//some io.Reader stream to be read
	io.Copy(os.Stdout, r)
}
